﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ServiceSATT
{
    public class MailingService : IMailingService
    {
        public enum Tipo
        {
            NuevoUsuario, InscripcionTorneo, BajaTorneo, SancionAplicada, UsuarioDesabilitado,
            OlvidoPassword, TorneoProximo
        };
        string Servidor;
        int Puerto;
        string Usuario;
        string Password;
        string CasillaMail;
        string Destinatario;
        public string HoraEnvio;

        public MailingService()
        {
            Servidor = "smtp.gmail.com";
            Puerto = 587;
        }

        public MailMessage NuevoUsuario()
        {
            MailMessage Mail = new MailMessage();
            Mail.Priority = MailPriority.Normal;

            //Asunto
            Mail.Subject = "Registro en el Sistema de Tenis.";

            //Cuerpo del mail
            string CuerpoMail = "Usted ha sido registrado correctamente al sistema. ";
            CuerpoMail += "Su nombre de usuario es: " + Usuario + ".";
            CuerpoMail += "Su contraseña es: " + Password + ".";
            CuerpoMail += "Espero que disfrute de nuestro servicio. ";
            CuerpoMail += "Cualquier duda o sugerencia no dude en escribirnos a: " + CasillaMail;
            Mail.Body = CuerpoMail;

            //Destinatario
            Mail.To.Add(Destinatario);
            return Mail;
        }

        public MailMessage InscripcionTorneo()
        {
            MailMessage Mail = new MailMessage();
            Mail.Priority = MailPriority.Normal;

            //Asunto
            Mail.Subject = "Registro en el torneo.";

            //Cuerpo del mail            
            string CuerpoMail = "Usted ha sido registrado correctamente al torneo. ";
            //Agregar detalles de torneo
            CuerpoMail += "Espero que disfrute de nuestro servicio. ";
            CuerpoMail += "Cualquier duda o sugerencia no dude en escribirnos a: tenis.arg.bot@gmail.com";
            Mail.Body = CuerpoMail;

            //Destinatario
            Mail.To.Add(Destinatario);
            return Mail;
        }

        public MailMessage BajaTorneo()
        {
            MailMessage Mail = new MailMessage();
            Mail.Priority = MailPriority.Normal;

            //Asunto
            Mail.Subject = "Dado de baja de torneo.";

            //Cuerpo del mail            
            string CuerpoMail = "Usted ha sido dado de baja correctamente del torneo. ";
            CuerpoMail += "Espero que disfrute de nuestro servicio. ";
            CuerpoMail += "Cualquier duda o sugerencia no dude en escribirnos a: tenis.arg.bot@gmail.com";
            Mail.Body = CuerpoMail;

            //Destinatario
            Mail.To.Add(Destinatario);
            return Mail;
        }

        public MailMessage SancionAplicada()
        {
            MailMessage Mail = new MailMessage();
            Mail.Priority = MailPriority.Normal;

            //Asunto
            Mail.Subject = "Una sancion ha sido aplicada a usted.";

            //Cuerpo del mail
            string CuerpoMail = "Se le ha aplicado una sancion por: .";
            CuerpoMail += "Ésta la impusieron el dia: .";
            CuerpoMail += "Espero que disfrute de nuestro servicio. ";
            CuerpoMail += "Cualquier duda o sugerencia no dude en escribirnos a: tenis.arg.bot@gmail.com";
            Mail.Body = CuerpoMail;

            //Destinatario
            Mail.To.Add(Destinatario);
            return Mail;
        }

        public MailMessage UsuarioDesabilitado()
        {
            MailMessage Mail = new MailMessage();
            Mail.Priority = MailPriority.Normal;

            //Asunto
            Mail.Subject = "Usuario Desabilitado.";

            //Cuerpo del mail
            string CuerpoMail = "El ingreso al Sistema de Tenis ha sido desabilitado por reiterados intentos de ingresar su Password de manera errónea. ";
            CuerpoMail += "Ésta sanción fue impuesta el dia: " + DateTime.Now.ToShortDateString() + ".";
            CuerpoMail += "Para reabilitar su cuenta, consulte con el administrador o la gente encargada. ";
            CuerpoMail += "Espero que disfrute de nuestro servicio. ";
            CuerpoMail += "Cualquier duda o sugerencia no dude en escribirnos a: tenis.arg.bot@gmail.com ";
            Mail.Body = CuerpoMail;

            //Destinatario
            Mail.To.Add(Destinatario);
            return Mail;
        }

        public MailMessage OlvidoPassword()
        {
            MailMessage Mail = new MailMessage();
            Mail.Priority = MailPriority.Normal;

            //Asunto
            Mail.Subject = "Datos Personales.";

            //Cuerpo del Mail
            string CuerpoMail = " Usted ha solicitado sus datos personales de ingreso al sistema. ";
            CuerpoMail += " Si no fue asi, sólo elimine el mensaje. ";
            CuerpoMail += " Su Usuario para el ingreso es: ";
            CuerpoMail += " Su Password: " ;
            CuerpoMail += " Estado de la cuenta: ";
            CuerpoMail += " Tipo de Usuario: ";
            Mail.Body = CuerpoMail;

            //Destinatario
            Mail.To.Add(Destinatario);
            return Mail;
        }

        #region Miembros de IMailingService

        public void EnviarEmail(IInterfazMailing Ui)
        {
            //configuracion mail
            
            MailMessage Mensaje = new MailMessage();
            
            Mensaje.From = new MailAddress(Usuario, Usuario, Encoding.UTF8);
            Mensaje.SubjectEncoding = Encoding.UTF8;
            Mensaje.BodyEncoding = Encoding.Unicode;
            Mensaje.IsBodyHtml = false;
            Mensaje.Priority = MailPriority.Normal;
            SmtpClient ClienteSmpt = new SmtpClient(Servidor, Puerto);
            ClienteSmpt.UseDefaultCredentials = false;
            ClienteSmpt.EnableSsl = true;
            ClienteSmpt.Credentials = new NetworkCredential(Usuario, Password);

            //envio mail
            try
            {
                ClienteSmpt.Send(Mensaje);
            }
            catch (SmtpException)
            {
                
            } 
        }

        #endregion
    }
}
